跳到主要内容

Redis Key 查询相关语法

由于在某个系统中部署了缓存中间件,因此需要频繁的登录跳板机进行缓存键的一些检查,以下记录了一些常用的 Redis key 相关查询语法,以备不时之需。

DBSIZE

查看当前库 key 的数量。

INFO KEYSPACE

查看所有库 key 的数量。

KEYS pattern

命令会返回所有符合规则的键,通过 KEYS *,即可列出数据库中所有键名。它的 pattern 匹配规则为:

  • h?llo matches hello, hallo and hxllo
  • h*llo matches hllo and heeeello
  • h[ae]llo matches hello and hallo, but not hillo
  • h[^e]llo matches hallo, hbllo, ... but not hello
  • h[a-b]llo matches hallo and hbllo

切勿在生产数据库中使用该命令,因为它可能会造成性能问题,会引起进程阻塞,严重的话会引起应用程序出现雪崩,当我第一次在测试数据库中使用时,同事问了一句:“那么暴力的吗?”,对不起,请原谅我的无知。在生产或应用中,请使用 SCAN 命令代替。

SCAN

SCAN 是一个基于游标的迭代器,每次迭代执行时,都会向用户返回一个新的游标,用户可使用该游标在下一次迭代中执行。举一个列子当执行 SCAN 0,代表从头开始迭代:

redis 127.0.0.1:6379> scan 0
1) "17"
2) 1) "key:12"
2) "key:8"
3) "key:4"
4) "key:14"
5) "key:16"
6) "key:17"
7) "key:15"
8) "key:10"
9) "key:3"
10) "key:7"
11) "key:1"

scan 命令返回了两个参数,第一个参数即是新的游标,第二个参数代表迭代出的键名与对应的游标,我们紧接着最新的游标进行迭代时:

redis 127.0.0.1:6379> scan 17
1) "0"
2) 1) "key:5"
2) "key:18"
3) "key:0"
4) "key:2"
5) "key:19"
6) "key:13"
7) "key:6"
8) "key:9"
9) "key:11"

这时第一个参数返回 0,表示已经没有新的游标。在每一次 SCAN 执行时,返回的数量默认是 10,可通过 SCAN 的参数 COUNT 进行调整。

以上是 SCAN 最基本的用法,对于替代 KEYS 命令,可以使用 SCAN 的完整语法:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type],举一个例子,我想要查找键名以 article 开头的 KEY 可以这样写:scan 0 MATCH article* count 10

由上可知,SCAN 相较于 KEYS 的优势在于:以迭代器的形式分片执行,避免阻塞,且可控制每次查询的范围。至于 SCAN 的缺点,之后再总结吧

参考